﻿/*
 * ********************************************************************************************************************
 *
 *               iFHS7.
 *              ;BBMBMBMc                  rZMBMBR              BMB
 *              MBEr:;PBM,               7MBMMEOBB:             BBB                       RBW
 *     XK:      BO     SB.     :SZ       MBM.       c;;     ir  BBM :FFr       :SSF:    ;xBMB:r   iuGXv.    i:. iF2;
 *     DBBM0r.  :D     S7   ;XMBMB       GMBMu.     MBM:   BMB  MBMBBBMBMS   WMBMBMBBK  MBMBMBM  BMBRBMBW  .MBMBMBMBB
 *      :JMRMMD  ..    ,  1MMRM1;         ;MBMBBR:   MBM  ;MB:  BMB:   MBM. RMBr   sBMH   BM0         UMB,  BMB.  KMBv
 *     ;.   XOW  B1; :uM: 1RE,   i           .2BMBs  rMB. MBO   MBO    JMB; MBB     MBM   BBS    7MBMBOBM:  MBW   :BMc
 *     OBRJ.SEE  MRDOWOR, 3DE:7OBM       .     ;BMB   RMR7BM    BMB    MBB. BMB    ,BMR  .BBZ   MMB   rMB,  BMM   rMB7
 *     :FBRO0D0  RKXSXPR. JOKOOMPi       BMBSSWBMB;    BMBB:    MBMB0ZMBMS  .BMBOXRBMB    MBMDE RBM2;SMBM;  MBB   xBM2
 *         iZGE  O0SHSPO. uGZ7.          sBMBMBDL      :BMO     OZu:BMBK,     rRBMB0;     ,EBMB  xBMBr:ER.  RDU   :OO;
 *     ,BZ, 1D0  RPSFHXR. xWZ .SMr                  . .BBB
 *      :0BMRDG  RESSSKR. 2WOMBW;                   BMBMR
 *         i0BM: SWKHKGO  MBDv
 *           .UB  OOGDM. MK,                                          Copyright (c) 2015-2019.  斯伯坦机器人
 *              ,  XMW  ..
 *                  r                                                                     All rights reserved.
 *
 * ********************************************************************************************************************
 */


using MongoDB.Driver;
using System.ComponentModel;
using System.Windows.Controls;

namespace MongoPI
{
    /// <summary>
    /// CollectionView.xaml 的交互逻辑
    /// </summary>
    public partial class CollectionView : UserControl, INotifyPropertyChanged
    {
        /// <summary>
        /// 实现INotifyPropertyChanged接口
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// Mongo数据库
        /// </summary>
        private IMongoDatabase mDatabase;

        #region 定义属性
        /// <summary>
        /// 服务器名
        /// </summary>
        private string mServerName;
        public string ServerName
        {
            get => mServerName;
            set
            {
                mServerName = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ServerName)));
            }
        }

        /// <summary>
        /// 数据库名
        /// </summary>
        private string mDatabaseName;
        public string DatabaseName
        {
            get => mDatabaseName;
            set
            {
                mDatabaseName = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DatabaseName)));
            }
        }

        /// <summary>
        /// 集合名
        /// </summary>
        private string mCollectionName;
        public string CollectionName
        {
            get => mCollectionName;
            set
            {
                mCollectionName = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CollectionName)));
            }
        }

        /// <summary>
        /// 查询
        /// </summary>
        private string mQuery = "{}";
        public string Query
        {
            get => mQuery;
            set
            {
                mQuery = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Query)));
            }
        }

        /// <summary>
        /// 映射
        /// </summary>
        private string mProjection = "{}";
        public string Projection
        {
            get => mProjection;
            set
            {
                mProjection = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Projection)));
            }
        }

        /// <summary>
        /// 排序
        /// </summary>
        private string mSort = "{}";
        public string Sort
        {
            get => mSort;
            set
            {
                mSort = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Sort)));
            }
        }

        /// <summary>
        /// Skip
        /// </summary>
        private long mSkip;
        public long Skip
        {
            get
            {
                return mSkip;
            }
            set
            {
                mSkip = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Skip)));
            }
        }

        /// <summary>
        /// Limit
        /// </summary>
        private long mLimit;
        public long Limit
        {
            get
            {
                return mLimit;
            }
            set
            {
                mLimit = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Limit)));
            }
        }
        #endregion

        /// <summary>
        /// 集合操作视图构造函数
        /// </summary>
        public CollectionView(string server, IMongoDatabase database, string collection)
        {
            InitializeComponent();
            DataContext = this;

            mDatabase = database;
            ServerName = server;
            DatabaseName = mDatabase.DatabaseNamespace.DatabaseName;
            CollectionName = collection;

            return;
        } // Function CollectionView
    } // Class CollectionView
} // Namespace MongoPI
